home *** CD-ROM | disk | FTP | other *** search
-
- UNIT NetBIOS;
- { ver 0.100
- ^^ bug fix
- ^ minor rev
- ^ major rev
- { Turbo Pascal 5.5 }
- { 0.100 work start nov 25 1991 Tony Bigras (604) 753-3245 x2588 }
- { Public Domain, Absolutly NO liability accepted! }
- { for use of NetBIOS functions }
- { 0.723 additional checks for netbios
-
- }
- INTERFACE
-
- USES Dos;
-
- CONST
- ncbaddname= $30;
- ncbdelname= $31;
- ncbreset= $32;
- ncbadapterstatus= $33;
- ncbsessionstatus= $34;
- ncbaddgroup= $36;
- ncbcall= $10;
- ncblisten= $11;
- ncbhangup= $12;
- ncbsend= $14;
- ncbreceive= $15;
- ncbnetbiosstatus= $7F; { query if netbios loaded }
- postit= $80; { add to any waitable routine for concurrent action }
- ncbsenddatagram= $20; { next 4 are guesses }
- ncbrecdatagram= $21;
- ncbsendbroadcast= $22;
- ncbrecbroadcast= $23;
-
-
- TYPE
- netname = ARRAY[1..16] OF CHAR;
- { Format of name is padded trailing with blanks }
- { with a 0 in 16 }
- nameorbufinfo= RECORD
- CASE BOOLEAN OF
- FALSE: (name: netname); { Network name }
- TRUE: (nextbuflen: WORD; { Length of next buffer in chain }
- nexbufptr: POINTER) { Pointer to next buffer in chain }
- END; { CASE }
-
- ncbtype = RECORD { NetBIOS Network Control Block }
- command, { NetBIOS command }
- retcode, { Return code }
- lsn, { Logical session number }
- num: BYTE; { number of local name ie handle }
- bufptr: POINTER; { to message buffer }
- len: WORD; { Message buffer length 65535 maximum in session }
- callname: { Destination name or info about second buffer in }
- nameorbufinfo; { a CHAIN SEND command . }
- name: netname; { Source local name }
- rto, { Receive timeout in half seconds }
- sto: BYTE; { Send timeout in half seconds }
- post: POINTER; { Interrupt completion routine address }
- lanadaptnum: 0..1; { Number of lan adapter }
- cmdcomplete: BYTE; { Command complete flag }
- reserved: ARRAY[1..14] OF BYTE; { reserved for NetBIOS }
- END; { ncb }
-
-
- VAR
- netbiosactive: BOOLEAN;
-
- PROCEDURE nbcall(VAR n: ncbtype);
-
- IMPLEMENTATION
-
- PROCEDURE post; INTERRUPT; { NetBIOS completion routine }
-
- BEGIN { post }
- END; { post }
-
- PROCEDURE nbcall(VAR n: ncbtype);
- VAR
- reg: registers;
- BEGIN { nbcall }
- reg.ES:= SEG(n);
- reg.BX:= OFS(n);
- reg.AX:= $0100; { don't know why from some c code }
- INTR($5C,reg);
- END; { nbcall }
-
- PROCEDURE checknetbios;
- VAR
- tvect,tvect2: POINTER;
- ncb: ncbtype;
- BEGIN
-
- { 0.723 }
- GETINTVEC($5C,tvect);
- GETINTVEC($5D,tvect2);
- netbiosactive:= tvect<>tvect2; { tvect2 should have been unimplemented }
-
- IF netbiosactive THEN
- BEGIN
- ncb.command:= ncbnetbiosstatus;
- Nbcall(ncb);
- IF (ncb.retcode<> 35) THEN
- netbiosactive:= FALSE
- ELSE
- netbiosactive:= TRUE;
- END; { maybe active }
- END; { checknetbios }
-
- BEGIN { NetBIOS }
- checknetbios;
- END. { NetBIOS }
-